//
//  WBStatusViewModel.swift
//  仿微博
//
//  Created by apple on 2016/12/27.
//  Copyright © 2016年 apple. All rights reserved.
//

import Foundation


/// 单条微博的视图模型


/**
 如果没有任何父类，如果希望在开发时候调试，输出调试信息， 需要
 1.遵守 CustomStringConvertible
 2.实现  description 计算型属性
 
 
 关于表格的性能优化
 - 尽量少计算，所有需要的素材要提前计算好
 - 空间上不要设圆角半径，所有图像渲染的属性，都要注意
 - 不要动态创建控件， 所有需要的控件，都要提前创建好， 在显示的时候，根据数据隐藏  / 显示
 - cell 中 控件的层次越少越好， 数量越少越好
 
 
  */
class WBStatusViewModel: CustomStringConvertible {
    
    /// 微博模型
    var status:WBStatus
    
    /// 会员图标 - 存储型属性
    var memberIcon: UIImage?
     //认证类型。 -1 ：没有认证  0， 认证用户，  2，3，5 ：企业认证  220; 达人
    var vipIcon: UIImage?
    //转发
     var retweetedStr: String?
    //评论
     var commentStr: String?
    //赞
     var likeStr: String?
    //配图视图大小
    var pictureViewSize = CGSize()
    
    ///  如果是被转发的微博， 原创微博一定没有图
    var picURLs: [WBStatusPicture]? {
    // 如果有被转发的微博， 返回被转发微博的配图
    // 如果没有被转发的微博， 返回被转发微博的配图
    // 如果都没有， 返回 nil
    return status.retweeted_status?.pic_urls ?? status.pic_urls
    }
    
    /// 被转发微博的文字
    var retweetedText: String?
    
    
    
    /// 构造函数
    ///
    /// - Parameter model: 微博模型
    init(model: WBStatus) {
        self.status = model
         //common_icon_membership_level1
         //直接计算 会员图标  会员等级  0  - 6
        
        if (model.user?.mbrank)! > 0 && (model.user?.mbrank)! < 7 {
        
        let imageName = "common_icon_membership_level\(model.user?.mbrank ?? 1)"
            memberIcon = UIImage(named: imageName)
        }
        //认证图标
        switch model.user?.verified_type ?? -1 {
        case 0:
            vipIcon = UIImage(named: "avatar_vip")
        case 2,3,5:
            vipIcon = UIImage(named: "avatar_vip")
        case 220:
            vipIcon = UIImage(named: "avatar_vip")
        default:
            break
        }
        //底部数字
        model.reposts_count = Int(arc4random_uniform(100000))
        retweetedStr = countString(count: model.reposts_count, defaultStr: "转发")
        commentStr = countString(count: model.reposts_count, defaultStr: "评论")
        likeStr = countString(count: model.reposts_count, defaultStr: "赞")
        
        //计算视图大小（有原创的就计算原创的，有转发的就计算转发的）
        pictureViewSize = calcPictureViewSize(conut: picURLs?.count)
        
        //设置被转发的文字
        retweetedText = "@" + (status.retweeted_status?.user?.screen_name ?? "")
            + ":"
            + (status.retweeted_status?.text ?? "")
        
        
        
    }
    
    var description: String {
       return status.description
    }
    
   
    /// 使用单个图像，更新配图视图的大小
    ///
    /// - Parameter image: 网络缓存的单张图片
    func updateSingImageSize(image: UIImage){
        
        var size = image.size
        //注意 尺寸需要增加顶部的  12 个点， 便于布局
        size.height += WBStatusPictureViewOutterMargin
        pictureViewSize = size
    
    
    }
    /// 计算指定数量的图片对应的配图视图大小
    ///
    /// - Parameter conut: 配图数量
    /// - Returns: 配图视图大小
    private func calcPictureViewSize(conut: Int?) -> CGSize {
        
         if conut == 0 || conut == nil {
            return CGSize()
        }
        
        //1.计算高度
        /*
         1 2 3 = 0 1 2 / 3 = 0 + 1 = 1
         4 5 6 = 3 4 5 / 3 = 1 + 1 = 2
         7 8 9 = 6 7 8 / 3 = 2 + 1 = 3
         */
        //1>  根据 count 知道行数 1 ~ 9
        let row = (conut! - 1) / 3 + 1
        //2>根据行数算高度
        var height = WBStatusPictureViewOutterMargin
        height += CGFloat(row) * WBStatusPictureViewItemWidth
        height += CGFloat(row - 1) * WBStatusPictureViewOInnerMargin
        return CGSize(width: WBStatusPictureViewWidth, height: height)
    }
    
    /// 给定一个数字 ，返回对应的描述结果
    ///
    /// - Parameters:
    ///   - count: 数字
    ///   - defaultStr: 默认字符串，转发/评论/赞
    /// - Returns: 描述结果
    private func countString(count: Int, defaultStr: String) -> String {
    
        if count == 0 {
            return defaultStr
        }
        if count < 10000 {
            return count.description
        }
       return String(format: "%.02f 万", Double (count) / 10000)
    }
    
    
    
    
    
    
}
